package com.hina.rec.application.convert.system;


import com.hina.rec.domain.model.UserDO;
import com.hina.rec.endpoint.req.system.UserSaveReq;
import com.hina.rec.endpoint.req.system.UserUpdateReq;
import com.hina.rec.endpoint.res.system.UserInfoRes;
import com.hina.rec.endpoint.res.system.UserRes;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 用户对象转换器
 *
 * @author liaosp
 * @date 2024-01-10
 */
@Mapper
public interface UserConvert {

    UserConvert INSTANCE = Mappers.getMapper(UserConvert.class);

    /**
     * 用户创建请求转换为用户DO
     *
     * @param req 用户创建请求
     * @return 用户DO
     */
    UserDO toUserDO(UserSaveReq req);

    /**
     * 用户更新请求转换为用户DO
     *
     * @param req 用户更新请求
     * @return 用户DO
     */
    UserDO toUserDO(UserUpdateReq req);

    /**
     * 用户DO转换为用户响应
     *
     * @param userDO 用户DO
     * @return 用户响应
     */
    UserRes toUserRes(UserDO userDO);

    /**
     * 用户DO列表转换为用户响应列表
     *
     * @param userDOList 用户DO列表
     * @return 用户响应列表
     */
    List<UserRes> toUserResList(List<UserDO> userDOList);

    /**
     * 用户DO列表转换为用户精简响应列表
     *
     * @param userDOList 用户DO列表
     * @return 用户精简响应列表
     */
    @Mapping(target = "id", source = "id")
    @Mapping(target = "username", source = "username")
    List<UserRes> toSimpleUserResList(List<UserDO> userDOList);

    /**
     * 用户DO转换为用户信息响应
     *
     * @param userDO 用户DO
     * @return 用户信息响应
     */
    UserInfoRes toUserInfoRes(UserDO userDO);
}